// let num:number = 10 ; 
// let str:string ='hello zf';
// let bool:boolean = true ; 



// let num1 :number =1 ; 
// let num2:Number =1 ;
// let num3 :number = Number(1)
// console.log(num3)
// let num4 :Number =new Number(1)

// const enum ROLE {
//     USER ,
//     ADMIN ,
//     MANAGER
// }
// console.log(ROLE.USER)

// class Animal {
//     private _name: string = 'Tom';

//     get name() { // 属性访问器 ---好处：可以通过这个访问私有属性，有点像代理 暴露方法访问属性
//         return this._name;
//     }
//     set name(name: string) {
//         this._name = name;
//     }
//     cc='a'
//     static b ='b'

// }
// let animal = new Animal();
// console.log(animal);


// function addSay1(a:string){
//     console.log(a) 
//     return function(target:any){
//         console.log(1)
//     }
// }
// function addSay2(b:string){
//     console.log(b)
//     return function(target:any){
//         console.log(2)
//     }
// }
// function addSay3(c:string){
//     console.log(c)
//     return function(target:any){
//         console.log(3)
//     }
// }
// // 有参数的情况执行顺序 a -> b->c ->3 ->2->1 看编译后的源码得出来的结论

// @addSay1('a1')
// @addSay2('a2')
// @addSay3('a3')



// class PerSon {
   
// }
// let person = new PerSon()
function addSay(target:any){
    target.prototype.say = function(){console.log('say')}
}
@addSay
class Person {
    say!:Function
}
let person = new Person
person.say();